package com.gqs.bookstore.service.impl;

import java.sql.SQLException;
import java.util.Date;

import org.apache.commons.codec.digest.DigestUtils;

import com.gqs.bookstore.dao.UserDao;
import com.gqs.bookstore.dao.impl.UserDaoImpl;
import com.gqs.bookstore.service.UserService;
import com.gqs.bookstore.util.Salt;
import com.gqs.bookstore.vo.Users;
@SuppressWarnings("unused")
public class UserServiceImpl implements UserService {
	private UserDao userDao = new UserDaoImpl();
	
	/**
	 * 进行注册【也就是增加用户】
	 * 业务逻辑层进行处理后得到Salt和Password_digist并将它们set进users对象里，最终传到数据库里
	 * @throws SQLException 
	 */
	@Override
	public Users regist(Users users) throws SQLException {
		//前台接收到的只是账号，昵称，密码，电话
		if(users == null){
			return null;
		}
		
		//得到盐值
		String salt = Salt.getSalt();
		users.setSalt(salt);
		
		//得到根据加密规则后的加强版盐值------加密规则【自己定】：account + salt + password
		String saltSign = users.getAccount() + salt + users.getPassword();
		
		//根据md5码得到密文
		String passwordDigist = DigestUtils.md5Hex(saltSign);
		users.setPassword_digist(passwordDigist);
		
		//获取创建和更新日期
		Date d = new Date();
		users.setCreateAt(d);
		users.setUpdateAt(d);
		users = userDao.save(users);
		return users;
	}

	
	/**
	 * 登录的结果验证
	 * @throws SQLException 
	 */
	@Override
	public Users auth(String account, String password) throws SQLException {
		//验证账号不正确，返回为空
		Users users = userDao.findByAccount(account);
		if(users == null){
			return null;
		} else{
				//底下是账号已经正确了,要开始验证密码了
				Date lastloginDate = users.getLast_login_time();
				//得到要验证密码的密文
				String salt = users.getSalt();
				String saltSign = account + salt + password;
				String passwordDigist = DigestUtils.md5Hex(saltSign);
				
				//验证的登录的密码加密后的密码与已存在数据库中密码是否一致
				if(passwordDigist.equals(users.getPassword_digist())){
					//如果一致，则登录成功，然后要修改数据库里的最后一次登录的时间
					users.setLast_login_time(new Date());
					users.setUpdateAt(new Date());
					userDao.modify(users);//在数据库里进行LastLoginTime和UpdateAt的修改
					
					//返回的这个users对象是你当时查的那个users对象，所以这个LastLoginTime和原来一致
					users.setLast_login_time(lastloginDate);
					return users;
				} else{
					//验证密码不正确，返回为空
					return null;
				}
			}
		}
}
